function addEventListener(el, type, fn, selector) {
  if(typeof el === 'string') {
    el = document.querySelector(el);
  }

  // 事件绑定
  // 如果没有传递子元素的选择器，则给el元素绑定事件
  if(!selector) {
    el.addEventListener(type, fn);
  } else {
    // 如果传递了子元素的选择器，则给el元素的子元素绑定事件
    el.addEventListener(type, e => {
      // 获取当前点击的元素
      const target = e.target;

      // 判断当前点击的元素是否是el元素的子元素
      if(target.matches(selector)) {
        // 如果是，则调用fn函数
        fn.call(target, e);
      }
    })
  }
}